/**
 *
 * @author Cesar Mamani Lipa
 * @date   01/04/2010
 */

var registroGrado=null;
var winMantenerGrado=null;

function gestionarGrado(){
  var dsGrados = new Ext.data.GroupingStore({
        url:"lista-grados",
        reader: new Ext.data.JsonReader({
            root: 'grado',
            totalProperty: 'totalcount',
            fields:
            [
            {
                name: "ngradIdentificador",
                type: "integer"
            },
            {
                name: "cgradDescripcion",
                type: "string"
            },
            {
                name: "dgradFechacreacion",
                type: "string"
            },
            {
                name: "ngradGradosuperior",
                type: "integer"
            },
            {
                name: "cgradDescripcionsuperior",
                type: "string"
            },
            {
                name: "ntippIdentificador",
                type: "integer"
            },
            {
                name: "ctippDescripcion",
                type: "string"
            },
            {
                name: "cgradSigla",
                type: "string"
            }
            ]
        }),
        sortInfo:{
            field: 'ctippDescripcion',
            direction: "ASC"
        },
        groupField: 'ctippDescripcion'
    });
    var dsTipoPersonalPolicial=new Ext.data.Store({
        autoDestroy: true,
        url: "lista-tipo-personal-policial",
        reader: new Ext.data.JsonReader(
        {
            root: "tipopersonalpolicial",
            fields:
            [
            {
                name: "ntippIdentificador",
                type: "integer"
            },
            {
                name: "ctippDescripcion",
                type: "string"
            },
            {
                name: "dtippFechacreacion",
                type: "string"
            }
            ]
        })
    });

    dsGrados.on("exception",function(proxy, type, action, options, response, arg){
        Ext.MessageBox.alert("Error","Sucedio un error al cargar los grados"+response.responseText);
    });

    dsTipoPersonalPolicial.on("exception",function(proxy, type, action, options, response, arg){
        Ext.MessageBox.alert("Error","Sucedio un error al cargar los tipos de personal policial"+response.responseText);
    });

    var grdGrados=new Ext.grid.GridPanel({
        store: dsGrados,
        loadMask: false,
        height:480,
        border:true,
        frame: false,
        plugins:[new Ext.ux.grid.Search({
            mode:'local',
            iconCls:false,
            minLength:2,
            width: 190
        })],
        columns:[{
            header: "Descripcion",
            dataIndex: "cgradDescripcion",
            width: 200,
            sortable:true
        },{
            header: "Sigla",
            dataIndex: "cgradSigla",
            width:80,
            sortable:true
        },{
            header: "Grado Superior",
            dataIndex: "cgradDescripcionsuperior",
            width: 200,
            sortable:true
        },{
            header: "Tipo Personal Policial",
            dataIndex: "ctippDescripcion",
            hidden:true,
            width: 0,
            sortable:true
        },{
            header: "Fecha Creacion",
            dataIndex: "dgradFechacreacion",
            width: 200,
            sortable:true
        }
        ],
       tbar:[{
            text:'Agregar',
            iconCls:'icon-add',
            handler: function(){
                mantenerGrado(true);
            }
        }, '-', {
            text:'Modificar',
            iconCls:'icon-modify',
            handler: function(){
                mantenerGrado(false);
            }
        },'-',{
            text:'Eliminar',
            iconCls:'icon-delete',
            handler: function(){
                eliminarGrado();
            }
        },'-',{
            text:'Imprimir',
            iconCls:'icon-print',
            handler: function(){
                printGrados();
            }
        }],
        view: new Ext.grid.GroupingView({
            forceFit:true,
            emptyText: 'No tiene grados que dependendan.',
            groupTextTpl : '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Grados" : "Grado"]})'
        })
    });

     grdGrados.on("rowclick",function(grid,rowIndex,e){
        registroGrado=grid.getStore().getAt(rowIndex);
    });

    var seleccionGrado=grdGrados.getSelectionModel();
    seleccionGrado.on("rowselect",function(sm,fila,registro){
        registroGrado=registro;
    });

    dsGrados.load();
    dsTipoPersonalPolicial.load();
      var win = new Ext.Window({
        title:'Administrar Grados',
        closeAction:'destroy',
        width:1055,
        x:0,
        y:0,
        shim:false,
        maximizable:false,
        resizable: false,
        animCollapse:false,
        layout: 'fit',
        items:grdGrados
    });
    win.show();
}

function mantenerGrado(nuevo){
    var frmGestionarGrado =new Ext.Panel({
            bodyBorder:true,
            height:400,
            bodyStyle: "background-color:#DFE8F6; border:0"
    });
    new Ajax.Request("frmGestionarGrado.html",{
        method: "post",
        asynchronous:false,
        onSuccess: function(transport){
            frmGestionarGrado.html=transport.responseText;
            winMantenerGrado= new Ext.Window({
                title: (nuevo ? 'Agregar ' : 'Modificar ') + 'Grado',
                closeAction:'destroy',
                width:410,
                height:220,

                items:[frmGestionarGrado],
                shim:false,
                modal:true,
                maximizable:true,
                minimizable:false,
                animCollapse:false,
                resizable:false,
                constrainHeader:true,
                bbar:[{
                    text:'Grabar',
                    iconCls:'icon-save',
                    handler: function(){
                        if (nuevo)
                            insertarGrado();
                        else
                            actualizarGrado();
                    }
                }, '-', {
                    text:'Cancelar',
                    iconCls:'icon-cancel',
                    handler: function(){
                        winMantenerGrado.destroy();
                    }
                }]
            });
            winMantenerGrado.show();
            cargarGrados();
            cargarTipoPersonalPolicial();
            winMantenerGrado.focus();
            if (!nuevo){
                $("frmgestionargrado").ngradIdentificador.value = registroGrado.data.ngradIdentificador;
                $("frmgestionargrado").cgradDescripcion.value = registroGrado.data.cgradDescripcion;
                $("frmgestionargrado").ngradGradosuperior.value = registroGrado.data.ngradGradosuperior;
                $("frmgestionargrado").ntippIdentificador.value = registroGrado.data.ntippIdentificador;
                $("frmgestionargrado").cgradSigla.value = registroGrado.data.cgradSigla;
            }
        },
        onFailure:function(t){
            Information("Aviso del Sistema","Sucedio un error al intentar cargar el formulario"+t.responseText);
        }
    });
}

function insertarGrado(){
    new Ajax.Request("grado!agregar",{
        method:"post",
        parameters: $("frmgestionargrado").serialize(),
        onSuccess: function(transport){
            var operacion =transport.responseText.evalJSON();
            if (operacion.success){
                Information("Aviso del Sistema",operacion.mensaje);
            }else{
                Information("Aviso del Sistema",operacion.mensaje);
            }
            winMantenerGrado.destroy();
            gestionarGrado();
        },
        onFailure:function(transport){
            Information("Aviso del Sistema","Sucedio un error al intentar cargar el formulario"+transport.responseText);
        }
    });
}

function actualizarGrado(){
    new Ajax.Request("grado!modificar",{
        method:"post",
        parameters: $("frmgestionargrado").serialize(),
        onSuccess: function(transport){
            var operacion =transport.responseText.evalJSON();
            if (operacion.success){
                Information("Aviso del Sistema",operacion.mensaje);
            }else{
                Information("Aviso del Sistema",operacion.mensaje);
            }
            winMantenerGrado.destroy();
            gestionarGrado();
        },
        onFailure:function(transport){
            Information("Aviso del Sistema","Sucedio un error al intentar cargar el formulario"+transport.responseText);
        }
    });
}

function eliminarGrado(){
    Ext.MessageBox.confirm("Confirmación", "Eliminar Registro", function(button){
            if(button=="yes"){
                new Ajax.Request("grado!eliminar",{
                    method:"post",
                    parameters:{
                        ngradIdentificador: registroGrado.data.ngradIdentificador
                    },
                    onSuccess: function(transport){
                        var operacion = transport.responseText.evalJSON();
                        if (operacion.success){
                            Information("Aviso del Sistema",operacion.mensaje);
                        }else{
                            Information("Aviso del Sistema",operacion.mensaje);
                        }
                        gestionarGrado();
                    },
                    onFailure: function(transport){
                        Information("Aviso del Sistema","Sucedio un error al intentar eliminar el registro"+transport.responseText);
                    }
                });
            }
        });
}

function cargarGrados(){
  new Ajax.Request("lista-grados",{
        method: "post",
        asynchronous:false,
        onSuccess: function(transport){
            var egsSelect = $("ngradGradosuperior");
            removeAllOptions(egsSelect);
            var lstgrados = transport.responseText.evalJSON();
            for (var i=0;i<lstgrados.grado.length;i++){
                var eOption = document.createElement("option");
                eOption.setAttribute("value", lstgrados.grado[i].ngradIdentificador);
                eOption.appendChild(document.createTextNode(lstgrados.grado[i].cgradDescripcion));
                egsSelect.appendChild(eOption);
            }
        }
    });
}

function cargarTipoPersonalPolicial(){
   new Ajax.Request("lista-tipo-personal-policial",{
        method: "post",
        asynchronous:false,
        onSuccess: function(transport){
            var eiSelect = $("ntippIdentificador");
            removeAllOptions(eiSelect);
            var lsttipopersonalpolicial = transport.responseText.evalJSON();
            for (i=0;i<lsttipopersonalpolicial.tipopersonalpolicial.length;i++){
                eOption = document.createElement("option");
                eOption.setAttribute("value", lsttipopersonalpolicial.tipopersonalpolicial[i].ntippIdentificador);
                eOption.appendChild(document.createTextNode(lsttipopersonalpolicial.tipopersonalpolicial[i].ctippDescripcion));
                eiSelect.appendChild(eOption);
            }
        }
    });
}

function printGrados(){
    var width  = screen.width-50;
    var height = screen.height-100;
    var left   = 10;
    var top    = 10;
    var params = 'width='+width+',height='+height;
    params += ',top='+top+',left='+left;
    params += ',directories=no';
    params += ',location=no';
    params += ',menubar=no';
    params += ',resizable=yes';
    params += ',scrollbars=no';
    params += ',status=no';
    params += ',toolbar=no';
    window.open("GradoServlet.pdf",'windowname',params);
}